package cn.e4j.core.util;

import java.util.Scanner;

public class NumToRMB {
    private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖"};
    private String[] unitArr = {"拾" , "佰" , "千","万","十万","百万","千万","亿","十","百","千","万","千万","亿"};
    private String[] unitArr1 = {"分" , "角"};
    /**
     　　* 把一个浮点数分解成整数部分和小数部分字符串
     　　* @param num 需要被分解的浮点数
     　　* @return 分解出来的整数部分和小数部分。第一个数组元素是整数部分，第二个数组元素是小数部分。
     　　*/
    public String[] divide(double num) {
        // 将一个浮点数强制类型转换为long，即得到它的整数部分
        int zheng = (int)num;
        // 浮点数减去整数部分，得到小数部分，小数部分乘以100后再取整得到2位小数
        int xiao = (int) Math.round((num - zheng) * 100);
        // 下面用了2种方法把整数转换为字符串
        //System.out.println("divide:"+new String[]{zheng + "", String.valueOf(xiao)});
        return new String[]{zheng + "", String.valueOf(xiao)};
    }

    public int[] toNum(double num){
        int num1=(int)num;

        Integer zheng = (Integer)num1;
        //String s1 = zheng.toString();
        //Integer numk1 = (int) (zheng%10000);//取整数的底四位
        String s1 = zheng.toString();
        int numLen1 = s1.length();
        int[] numarry = new int[numLen1];
        for(int i=0;i<numLen1;i++) {
            numarry[i] = s1.charAt(i) - 48;

            //numarry[0][i]=numarry1[i];
            System.out.println(i+":"+numarry[i]);
        }
        return numarry;
    }

    /**
     　　* 把一个四位的数字字符串变成汉字字符串
     　　* @param numStr 需要被转换的四位的数字字符串
     　　* @return 四位的数字字符串被转换成的汉字字符串。
     　　*/
    public String toHanStr(int[] numarry) {
        String result = "";
        int numLen = numarry.length;
        // 依次遍历数字字符串的每一位数字
        for (int i = 0 ; i < numLen ; i++ ) {
            // 把char型数字转换成的int型数字，因为它们的ASCII码值恰好相差48
            // 因此把char型数字减去48得到int型数字，例如'4'被转换成4。
            // int num = numarry.charAt(i) - 48;
            // 如果不是最后一位数字，而且数字不是零，则需要添加单位（千、百、十）
            if ( i != numLen - 1&& numarry[i]!= 0 ) {
                result += hanArr[numarry[i]] + unitArr[numLen - 2 - i];
            } else if (i>0 ) {
                if ((numarry[i]==0)&&(numarry[i-1]==0) ) {
                    //result +="";
                }
            } else if(i == numLen - 1&& numarry[i]== 0 ) {

            } else {// 否则不要添加单位
                result += hanArr[numarry[i]];
            }
        }
        //System.out.println("result:"+result+hanArr[numarry[numLen-1]]);
        return result+hanArr[numarry[numLen-1]];
    }


    public String toHanStr1(String numStr) {
        String result = "";
        int numLen = numStr.length();
        // 依次遍历数字字符串的每一位数字
        for (int i = 0 ; i < numLen ; i++ ) {
            // 把char型数字转换成的int型数字，因为它们的ASCII码值恰好相差48
            // 因此把char型数字减去48得到int型数字，例如'4'被转换成4。
            int num = numStr.charAt(i) - 48;
            // 如果不是最后一位数字，而且数字不是零，则需要添加单位（千、百、十）
            if ( i != numLen - 1 && num != 0) {
                result += hanArr[num] + unitArr1[numLen - 1 - i];
            } else {// 否则不要添加单位
                result += hanArr[num];
            }
        }
        return result+"分";
    }

    public static void main(String[] args) {
        /*System.out.println("请输入要转换的钱数：");*/
        @SuppressWarnings("resource")
        Scanner in = new Scanner(System.in);
        Double inmun = in.nextDouble();
        NumToRMB nr = new NumToRMB();
        // 测试把一个浮点数分解成整数部分和小数部分
        //System.out.println(Arrays.toString(nr.divide(236711125.123)));
        // 测试把一个四位的数字字符串变成汉字字符串
        System.out.print(nr.toHanStr(nr.toNum(inmun))+"圆");
        System.out.print(nr.toHanStr1(nr.divide(inmun)[1]));
        //System.out.println(nr.toHanStr("100"));
    }

}
